package com.huawei.deployentity;

import com.huawei.inputentity.Server;

import java.util.ArrayList;
import java.util.List;

/**
 * 用于候选服务器
 */
public class CandidateDeployServer extends DeployServer {
    private List<DeployVM> requireDistributeList = new ArrayList<>();
    // TODO: 2021/3/16 似乎需要计算一下这个候选服务器剩余的空间数？考虑申明一个私有类，这样就可直接调用
    // 直接getRestResource()就能解决问题

    /**
     * @param id     此时只是候选，不需要分配id，故不设置这个参数
     * @param server 当前购买的服务器所属类型
     */
    public CandidateDeployServer(Server server) {
        super(server);
    }

    public List<DeployVM> getDeployVMDistributeList() {
        return requireDistributeList;
    }
    /**
     * 添加一个请求到该候选服务器中
     * @param deployVM
     */
    public void addDeployVMDistributeList(DeployVM deployVM) {
        this.requireDistributeList.add(deployVM);
    }

    /**
     * 获取候选服务器剩余资源指标
     * @return
     */
    public int getRestResource(){
        // TODO: 2021/3/16 剩余资源计算似乎需要好好思考一下，如果cpu或memory之一清零了算是剩余资源少还是多呢？这里就暂时累加
        //  是否可以两种资源相减。差值越小说明分配越优秀？|restCpu-restMem|
        //  然后再k考虑两个的总资源|restCpu+restMem|
        //  相加是不是就可以反映分配的是否合理？
        int restCpu=getNodeARestCPU()+getNodeBRestCPU();
        int restMem=getNodeARestMemory()+getNodeBRestMemory();
        return restCpu+restMem+Math.abs(restCpu-restMem);
    }
}
